package com.briup.pts.utils;

import lombok.SneakyThrows;
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 用于bean转换操作的工具类
 */
public class BeanUtil {

    /**
     * 将bean对象转换为VO对象
     *
     * @param source 原数据对象
     * @param target 目标类型
     * @return 目标类型的对象
     */
    @SneakyThrows
    public static <T> T bean2VO(Object source, Class<T> target){
        // 创建目标类的对象
        T t = target.getConstructor().newInstance();
        // 根据BeanUtils进行bean拷贝的工作
        BeanUtils.copyProperties(source, t);
        return t;
    }

    /**
     * 批量将列表中的bean对象转换为新的VO对象，并且放入到集合中返回
     *
     * @param target  VO对象的类型
     * @param sources 原数据集合
     * @return 新的vo对象集合
     */
    @SneakyThrows
    public static <T> List<T> bean2VOS(List<?> sources, Class<T> target) {
        List<T> list = new ArrayList<>();
        // 遍历集合，将集合中的数据分别转化
        for (Object source : sources) {
            T t = bean2VO(source, target);
            list.add(t);
        }
        return list;
    }
}
